package br.edu.ifce.mflj.gui;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JList;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;

import br.edu.ifce.mflj.controller.IControlador;
import br.edu.ifce.mflj.dados.Usuario;
import br.edu.ifce.mflj.observer.ChatListener;
import br.edu.ifce.mflj.observer.UsuarioListener;

public class DamasJFrame {

	private JFrame			janelaPrincipal;

	private	JTextArea		textEditorDeMensagens,
							textMensagensRecebidas;
	private	JScrollPane		scrollEditorDeMensagens,
							scrollMensagensRecebidas,
							scrollListaDeUsuarios;
	private	JButton			botaoEnviarMensagem,
							botaoIniciarJogo;
	private	JList			listaDeUsuarios;
	private	JPanel			panelTabuleiro;

	private IControlador	controlador;

	/**
	 * @return the controlador
	 */
	public IControlador getControlador() {
		return controlador;
	}

	/**
	 * @param controlador the controlador to set
	 */
	public void setControlador(IControlador controlador) {
		this.controlador = controlador;
	}

	/**
	 * @return the janelaPrincipal
	 */
	public JFrame getJanelaPrincipal() {
		return janelaPrincipal;
	}

	/**
	 * @param janelaPrincipal the janelaPrincipal to set
	 */
	public void setJanelaPrincipal(JFrame janelaPrincipal) {
		this.janelaPrincipal = janelaPrincipal;
	}

	/**
	 * @return the textEditorDeMensagens
	 */
	public JTextArea getTextEditorDeMensagens() {
		return textEditorDeMensagens;
	}

	/**
	 * @param textEditorDeMensagens the textEditorDeMensagens to set
	 */
	public void setTextEditorDeMensagens(JTextArea textEditorDeMensagens) {
		this.textEditorDeMensagens = textEditorDeMensagens;
	}

	/**
	 * @return the textMensagensRecebidas
	 */
	public JTextArea getTextMensagensRecebidas() {
		return textMensagensRecebidas;
	}

	/**
	 * @param textMensagensRecebidas the textMensagensRecebidas to set
	 */
	public void setTextMensagensRecebidas(JTextArea textMensagensRecebidas) {
		this.textMensagensRecebidas = textMensagensRecebidas;
	}

	/**
	 * @return the scrollEditorDeMensagens
	 */
	public JScrollPane getScrollEditorDeMensagens() {
		return scrollEditorDeMensagens;
	}

	/**
	 * @param scrollEditorDeMensagens the scrollEditorDeMensagens to set
	 */
	public void setScrollEditorDeMensagens(JScrollPane scrollEditorDeMensagens) {
		this.scrollEditorDeMensagens = scrollEditorDeMensagens;
	}

	/**
	 * @return the scrollMensagensRecebidas
	 */
	public JScrollPane getScrollMensagensRecebidas() {
		return scrollMensagensRecebidas;
	}

	/**
	 * @param scrollMensagensRecebidas the scrollMensagensRecebidas to set
	 */
	public void setScrollMensagensRecebidas(JScrollPane scrollMensagensRecebidas) {
		this.scrollMensagensRecebidas = scrollMensagensRecebidas;
	}

	/**
	 * @return the scrollListaDeUsuarios
	 */
	public JScrollPane getScrollListaDeUsuarios() {
		return scrollListaDeUsuarios;
	}

	/**
	 * @param scrollListaDeUsuarios the scrollListaDeUsuarios to set
	 */
	public void setScrollListaDeUsuarios(JScrollPane scrollListaDeUsuarios) {
		this.scrollListaDeUsuarios = scrollListaDeUsuarios;
	}

	/**
	 * @return the botaoEnviarMensagem
	 */
	public JButton getBotaoEnviarMensagem() {
		return botaoEnviarMensagem;
	}

	/**
	 * @param botaoEnviarMensagem the botaoEnviarMensagem to set
	 */
	public void setBotaoEnviarMensagem(JButton botaoEnviarMensagem) {
		this.botaoEnviarMensagem = botaoEnviarMensagem;
	}

	/**
	 * @return the botaoIniciarJogo
	 */
	public JButton getBotaoIniciarJogo() {
		return botaoIniciarJogo;
	}

	/**
	 * @param botaoIniciarJogo the botaoIniciarJogo to set
	 */
	public void setBotaoIniciarJogo(JButton botaoIniciarJogo) {
		this.botaoIniciarJogo = botaoIniciarJogo;
	}

	/**
	 * @return the listaDeUsuarios
	 */
	public JList getListaDeUsuarios() {
		return listaDeUsuarios;
	}

	/**
	 * @param listaDeUsuarios the listaDeUsuarios to set
	 */
	public void setListaDeUsuarios(JList listaDeUsuarios) {
		this.listaDeUsuarios = listaDeUsuarios;
	}

	/**
	 * @return the panelTabuleiro
	 */
	public JPanel getPanelTabuleiro() {
		return panelTabuleiro;
	}

	/**
	 * @param panelTabuleiro the panelTabuleiro to set
	 */
	public void setPanelTabuleiro(JPanel panelTabuleiro) {
		this.panelTabuleiro = panelTabuleiro;
	}

	/**
	 * Initialize the contents of the frame.
	 */
	public void inicializarInterfaceGrafica(){
		String	apelido = JOptionPane.showInputDialog( "Entre com seu nome: " );
		Usuario	usuario = new Usuario( apelido, controlador.getIdentificadorCanalDeSaida() );

		janelaPrincipal.setResizable( false );
		janelaPrincipal.setBounds( 100, 100, 594, 587 );
		janelaPrincipal.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
		janelaPrincipal.getContentPane().setLayout( null );
		janelaPrincipal.setVisible( true );
		janelaPrincipal.setTitle( "Seja bem vindo " + usuario.getApelido() );

		panelTabuleiro.setBounds( 12, 12, 400, 400 );
		((TabuleiroPanel)panelTabuleiro).setUsuario( usuario );

		scrollEditorDeMensagens.setBounds( 12, 485, 400, 37 );
		scrollEditorDeMensagens.setViewportView( textEditorDeMensagens );


		scrollMensagensRecebidas.setBounds( 12, 415, 400, 66 );
		scrollMensagensRecebidas.setViewportView( textMensagensRecebidas );

		textMensagensRecebidas.setEditable( false );

		scrollListaDeUsuarios.setBounds( 424, 12, 150, 400 );
		scrollListaDeUsuarios.setViewportView( listaDeUsuarios );
		
		botaoEnviarMensagem.setBounds( 295, 525, 117, 25 );
		botaoIniciarJogo.setBounds( 457, 415, 117, 25 );
		botaoIniciarJogo.addActionListener( new ActionListener(){
			@Override
			public void actionPerformed( ActionEvent actionEvent ){
				if( listaDeUsuarios.getSelectedValue() == null ){
					JOptionPane.showMessageDialog( null, "Selecione um advers\u00E1rio", "Aten\u00E7\u00E3o", JOptionPane.WARNING_MESSAGE );
				}
			}
		} );

		janelaPrincipal.getContentPane().add( panelTabuleiro );
		janelaPrincipal.getContentPane().add( scrollEditorDeMensagens );
		janelaPrincipal.getContentPane().add( botaoEnviarMensagem );
		janelaPrincipal.getContentPane().add( scrollMensagensRecebidas );
		janelaPrincipal.getContentPane().add( scrollListaDeUsuarios );
		janelaPrincipal.getContentPane().add( botaoIniciarJogo );

		controlador.addChatListener( (ChatListener) textMensagensRecebidas );
		controlador.addMouseListener( (MouseListener) panelTabuleiro );
		controlador.addMouseMotionListener( (MouseMotionListener) panelTabuleiro );
		controlador.addUsuarioListener( (UsuarioListener) listaDeUsuarios );

		controlador.iniciarCanal( usuario );

	}
}
